Измените аппаратную часть на основе предыдущего проекта HDMI:
Поскольку по умолчанию выход PS ZYNQ при использовании метода EMIO - это GMII, а наш сетевой чип (на плате-адаптере) RTL8211 выводит RGMII, нам необходимо добавить IP-модуль преобразования GMII в RGMII (Gmii to Rgmii).
Откройте модуль GMII TO RGMII и измените настройки, как показано ниже.
Кроме того, поскольку сброс GMII TO RGMII активен по высокому уровню, а ZYNQ выдает сброс по низкому уровню, нам нужно добавить инвертор (найдите utility и в полученных опциях выберите utility vector logic).
На странице настроек измените его на not (инвертор) и установите ширину бита равной 1.
Поскольку требования к конфигурации сетевого порта конфликтуют с требованиями к конфигурации HDMI, нам необходимо изменить настройки ZYNQ:
Подключите согласно схеме ниже:
После изменения блочной схемы сохраните ее, затем заново сгенерируйте "Generate Output Products" и "Create HDL Wrapper". Далее нам нужно изменить файл ограничений, чтобы назначить выводы для интерфейса Ethernet1 в соответствии со схемой.
Сохраните файл ограничений, затем выполните последующие операции для повторной генерации файла BIT.
Поскольку он может использовать тот же проект, что и Ethernet0, нет необходимости создавать новый проект. Однако некоторые изменения все же необходимы:
В файлах кода проекта измените сетевой порт на Ethernet1:
Измените файлы библиотеки lwip:
Измените файл lwip211.mld:
В соответствии с путем установки программного обеспечения, у меня он находится по адресу C:\Xilinx\Vitis\2021.1\data\embeddedsw\ThirdParty\sw_services\lwip211_v1_5\data. Добавьте следующее содержимое:
BEGIN CATEGORY emio_options PARAM name = emio_options, desc = "Settings for ETH using EMIO in PL"; PARAM name = use_gmii2rgmii_core_on_eth0, desc = "Settings for ETH0 using GMII to RGMII ip core in PL", type = bool, default = false; PARAM name = use_gmii2rgmii_core_on_eth1, desc = "Settings for ETH1 using GMII to RGMII ip core in PL", type = bool, default = false; PARAM name = gmii2rgmii_core_address_on_eth0, desc = "Settings for ETH0's PHY address of GMII to RGMII ip core in PL", type = int, default = 0; PARAM name = gmii2rgmii_core_address_on_eth1, desc = "Settings for ETH1's PHY address of GMII to RGMII ip core in PL", type = int, default = 0; END CATEGORYПосле этого откройте BSP и измените настройки, как показано на рисунке ниже:
Измените файл lwip211.tcl (путь к файлу: C:\Xilinx\Vitis\2021.1\data\embeddedsw\ThirdParty\sw_services\lwip211_v1_5\data) и добавьте следующее содержимое:
proc generate_lwip_opts {libhandle} { .... # Content added begins # EMIO options set use_gmii2rgmii_core_on_eth0 [common::get_property CONFIG.use_gmii2rgmii_core_on_eth0 $libhandle] set use_gmii2rgmii_core_on_eth1 [common::get_property CONFIG.use_gmii2rgmii_core_on_eth1 $libhandle] set gmii2rgmii_core_address_on_eth0 [common::get_property CONFIG.gmii2rgmii_core_address_on_eth0 $libhandle] set gmii2rgmii_core_address_on_eth1 [common::get_property CONFIG.gmii2rgmii_core_address_on_eth1 $libhandle]
if { $use_gmii2rgmii_core_on_eth0 == true } { puts $lwipopts_fd "\#define XPAR_GMII2RGMIICON_0N_ETH0_ADDR $gmii2rgmii_core_address_on_eth0" } if { $use_gmii2rgmii_core_on_eth1 == true } { puts $lwipopts_fd "\#define XPAR_GMII2RGMIICON_0N_ETH1_ADDR $gmii2rgmii_core_address_on_eth1" } # Content added ends
puts $lwipopts_fd "\#endif" close $lwipopts_fd}Аналогично, после внесения изменений, обязательно щелкните правой кнопкой мыши по проекту платформы и выберите Build Project:
После успешной компиляции проекта подключите JTAG отладочной платы к компьютеру с помощью кабеля USB Type-C, а другим кабелем USB Type-C подключите PS UART платы к компьютеру. Соедините плату и компьютер Ethernet-кабелем. Откройте на компьютере инструмент для отладки через последовательный порт, например MobaXterm, и установите соединение с PS UART отладочной платы. Через последовательный порт вы сможете увидеть, что сеть запущена, IP-адрес - 192.168.3.150, а сетевой порт - 7.
Используя компьютер с Windows в том же сегменте сети роутера (можно использовать IP-адрес хоста), выполните команду ping для этого IP-адреса. Если ping успешен, это означает, что сетевое соединение установлено:
После подключения с помощью ассистента сетевой отладки, любые отправленные вами данные будут получены обратно по сети (номер порта установлен на 7, а IP-адрес устанавливается в соответствии с IP-адресом платы, полученным ранее через последовательный порт). Запустите TCP-клиент на компьютере: